#include "Usuario.h"
#include <iostream>

Usuario::Usuario()
{
	this->id = -1;
}

Usuario::Usuario(const Usuario &_copia){

	this->id = _copia.id;
	this->login = _copia.login;
	this->tipoUsuario = _copia.tipoUsuario;
	this->senha = _copia.senha;
	this->nome = _copia.nome;
	this->cep = _copia.cep;
	this->endereco = _copia.endereco;
	this->complemento = _copia.complemento;
	this->telefone = _copia.telefone;
	this->livrosDeInteresse = _copia.livrosDeInteresse;
	this->interesses = _copia.interesses;

}

Usuario::~Usuario()
{
}


void Usuario::AdicionaInteresse(Interesse _iteresse)
{

	if(interesses.size() == 0) {

		this->interesses.push_back(_iteresse);

	}else{

		for(int i=0; i< (int)interesses.size(); i++){
			if(this->interesses[i] != _iteresse){
				this->interesses.push_back(_iteresse);
			}
		}

	}

}

Interesse Usuario::GetInteresse(int _posicao)
{
	Interesse interesse;

	if(_posicao < (int)this->interesses.size()){
		interesse = this->interesses[_posicao];
	}

	return interesse;
}

void Usuario::AdicionaLivroDeInteresse(Livro _livro)
{

	this->livrosDeInteresse.push_back(_livro);

}

Livro Usuario::GetLivroDeInteresse(int _posicao)
{
	Livro livro;

	livro = this->livrosDeInteresse[_posicao];

	return livro;
}

long Usuario::GetID() { return this->id; }
void Usuario::SetID( long _id) { this->id = _id; }

string Usuario::GetLogin() { return this->login; }
void Usuario::SetLogin( string _login ) { this->login = _login; }

void Usuario::SetSenha( string _senha ) { this->senha = _senha; }

Usuario::ENUM_TIPO Usuario::GetTipoUsuario() { return this->tipoUsuario; }
void Usuario::SetTipoUsuario(ENUM_TIPO _tipoUsuario) { this->tipoUsuario = _tipoUsuario; }

string Usuario::GetNome(){ return this->nome; }
void Usuario::SetNome(string _nome){ this->nome = _nome; }

string Usuario::GetCep(){return this->cep;};
void Usuario::SetCep(string _cep){this->cep = _cep;};

string Usuario::GetEndereco(){return this->endereco;};
void Usuario::SetEndereco(string _endereco){this->endereco = _endereco;};

string Usuario::GetComplemento(){return this->complemento;};
void Usuario::SetComplemento(string _complemento){this->complemento = _complemento;};

string Usuario::GetTelefone(){return this->telefone;};
void Usuario::SetTelefone(string _telefone){this->telefone = _telefone;};

ostream& operator <<(ostream &out, const Usuario &_usuario){

	Usuario usuario(_usuario);

	out << "ID: " << usuario.id << endl;
	out << "Login: " << usuario.login << endl;
	out << "Perfil: " << usuario.tipoUsuario << endl;
	out << "Nome: " << usuario.nome << endl << endl;

	out << "Lista dos interesses: " << endl << endl;

	for(int i=0; i < (int)usuario.interesses.size();i++){
		Interesse interesse = usuario.GetInteresse(i);
		out << interesse;
	}

	return out;

}

ostream& operator <<(ostream &out, const Usuario::ENUM_TIPO &_tipo){

	switch (_tipo){
		case Usuario::CLIENTE: out << "Cliente"; break;
		case Usuario::FUNCIONARIO: out << "Funcionario"; break;
	}

	return out;

}



